#include "主窗口.h"

HINSTANCE 全局_当前实例;
HWND	  全局_主窗口句柄 = NULL ;			// 当前窗口
char      全局_主窗口类名[字符串100] = "全局_主窗口类名",
          全局_标题栏文本[字符串100]   = "全局_标题栏文本";
int		g_nToolBarHeight = 0 ;
int		g_nZoomReset = 0 ;
ATOM 注册窗口类(HINSTANCE 实例句柄)
{
	char zhong[100]="\0";
	char* chCurPath = getcwd( NULL, 0);
	strcpy(zhong, chCurPath);
	char* wenjian ="\\资源\\图标\\main.ico";
	strcat(zhong, wenjian);

	WNDCLASSEX wc;
	RtlZeroMemory(&wc, sizeof wc);
    wc.hInstance     = 实例句柄;/*应用程序实例*/
    wc.lpszClassName = 全局_主窗口类名;
    wc.lpfnWndProc   = (WNDPROC)处理主窗口消息;/*主窗口消息处理函数*/
    wc.style         = CS_DBLCLKS|CS_VREDRAW|CS_HREDRAW|CS_BYTEALIGNCLIENT;/*CS_NOCLOSE(无关闭按钮)，CS_BYTEALIGNCLIENT(窗口客户区以byte的宽度对齐)*/
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);//(HBRUSH)GetStockObject(GRAY_BRUSH);/*也可以用CreateSolidBrush(RGB(255,0,0));，不过不用的时候药剂师的删除画刷DeleteObject(hRedBrush);*/
	wc.cbClsExtra = 0; // 无附加窗口类内存
	wc.cbWndExtra = 0; // 无附加窗口内存
    wc.hIcon=wc.hIconSm= LoadImage(NULL,               //包含所需要图片的实例的句柄。
                                 TEXT(zhong),        //图片所在路径及文件名
			                     IMAGE_ICON,         //图片类型。
			                     0,                  //图片宽度。
			                     0,                  //图片高度。
			                     LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_LOADFROMFILE
			                     );
    wc.hCursor       = LoadCursor(0, IDC_ARROW);
    wc.lpszMenuName  = MAKEINTRESOURCEA(菜单_顶部); // 菜单资源
    wc.cbSize = sizeof(wc);

    if (FALSE == RegisterClassEx(&wc))
        return 0;

    return RegisterClassEx(&wc);
}
BOOL 初始化实例(HINSTANCE 实例句柄, int 窗口显示方式)
{
/*● ICC_BAR_CLASSES——注册工具栏、状态栏、Trackbar和Tooltip类。
● ICC_COOL_CLASSES——注册Rebar类。
● ICC_DATE_CLASSES——注册Date and Time Picker类。
● ICC_HOTKEY_CLASS——注册Hot Key类。
● ICC_INTERNET_CLASSES——注册IP Address Picker类。
● ICC_LISTVIEW_CLASSES——注册ListView和Header类。
● ICC_PAGESCROLLER_CLASS——注册Pager类。
● ICC_PROGRESS_CLASS——注册Progress Bar类。
● ICC_TAB_CLASSES——注册Tab和Tooltip类。
● ICC_TREEVIEW_CLASSES——注册TreeView和Tooltip类。
● ICC_UPDOWN_CLASS——注册Up-Down类。
● ICC_USEREX_CLASSES——注册ComboBoxEx类。
● ICC_WIN95_CLASSES——注册InitCommonControls函数注册的所有类。
*/
	INITCOMMONCONTROLSEX icex ;
	icex.dwSize = sizeof(INITCOMMONCONTROLSEX) ;
	icex.dwICC = ICC_COOL_CLASSES | ICC_BAR_CLASSES ;
	BOOL bret = InitCommonControlsEx( & icex ) ;
	if( bret != TRUE )
	{
		MessageBox(NULL, TEXT("无法注册通用控件Rebar类、注册工具栏、状态栏、Trackbar和Tooltip类"), TEXT("错误"), MB_ICONERROR | MB_OK);
		return -1;
	}

	HFONT		自定义字体 ;
	自定义字体 = CreateFont(
			-15,/*字体的逻辑高度*/
			-7.5,/*字体的逻辑宽度*/
			0,/*指定移位向量相对X轴的偏转角度*/
			0,/*指定字符基线相对X轴的偏转角度*/
			400,/*设置字体粗细程度*/
			TRUE,/*是否启用斜体*/
			TRUE,/*是否启用下划线*/
			FALSE,/*是否启用删除线*/
			DEFAULT_CHARSET,/*指定字符集*/
			OUT_CHARACTER_PRECIS,/*输出精度*/
			CLIP_CHARACTER_PRECIS,/*剪裁精度*/
			DEFAULT_QUALITY,/*输出质量*/
			FF_DONTCARE,/*字体族*/
			"宋体"/*字体名*/
	);

	全局_当前实例 = 实例句柄; // 将实例句柄存储在全局变量中
    全局_主窗口句柄 = CreateWindow(
 		   全局_主窗口类名,        /*窗口类名，使用之前注册的主窗口类*/
 		   全局_标题栏文本,        /*窗口名，显示在窗口标题栏上的字符串*/
 		   WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_MAXIMIZE | WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW |WS_CLIPSIBLINGS,/*窗口样式。WS_VISIBLE,会闪屏*/
           CW_USEDEFAULT, /*水平位置（默认）*/
 		   0,              /*垂直位置（默认）*/
 		   CW_USEDEFAULT,  /*宽：CW_USEDEFAULT,*/
 		   0,              /*高：CW_USEDEFAULT,*/
 		   0,              /*无父窗口*/
 		   0,              /*菜单*/
 		   实例句柄,         /*应用程序实例*/
 		   0               /*无窗口创建数据*/
 		   );

    if (!全局_主窗口句柄)
        return 0;
    创建主窗顶部菜单(全局_主窗口句柄);
    创建主窗工具栏(全局_主窗口句柄,实例句柄);
    tabControl = DoCreateTabControl(全局_主窗口句柄);
    DoCreateDisplayWindow(tabControl);

	RECT		rectClient ;
	主窗状态栏句柄 = CreateWindow( STATUSCLASSNAME , "" , SBS_SIZEGRIP|WS_CHILD|WS_VISIBLE , 0 , 0 , 0 , 0 , 全局_主窗口句柄 , NULL , 实例句柄 , NULL ) ;
	GetClientRect( 主窗状态栏句柄 , & rectClient );
	g_nStatusBarHeight = rectClient.bottom - rectClient.top ;




//    HWND Scintilla句柄 = 创建Scintilla(实例句柄,全局_主窗口句柄);
//    SendMessage( Scintilla句柄 , WM_SETFONT , (WPARAM)自定义字体, 0);
    ShowWindow(全局_主窗口句柄, 窗口显示方式);
    UpdateWindow(全局_主窗口句柄);

    return TRUE;
}
LRESULT CALLBACK 处理主窗口消息(HWND 窗口句柄, UINT 消息ID, WPARAM wParam, LPARAM lParam)
{
	int		ret = 0;
    switch (消息ID)
    {
    case WM_PAINT:/*绘制主窗口*/
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(窗口句柄, &ps);
            // TODO: 在此处添加使用 hdc 的任何绘图代码...
            EndPaint(窗口句柄, &ps);
        }
        break;
    case WM_DESTROY:/*发送退出消息并返回*/
        PostQuitMessage(0);
        break;
    case WM_NOTIFY:
    	OnNotify(tabControl, hwndStatic, lParam);
        break;
    case WM_SIZE:

        break;
	case WM_CREATE:
		ret = 创建窗口( 窗口句柄 , wParam , lParam ) ;
		if( ret )
			PostQuitMessage(0);
		break;
    case WM_COMMAND:/*处理应用程序菜单*/
        {
            int wmId = LOWORD(wParam);
            /*分析菜单选择:*/
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(全局_当前实例, MAKEINTRESOURCE(IDD_ABOUTBOX), 窗口句柄, 关于);
                break;
            case IDM_EXIT:
                DestroyWindow(窗口句柄);
                break;
            default:
                return DefWindowProc(窗口句柄, 消息ID, wParam, lParam);
            }
        }
        break;
    default:
        return DefWindowProc(窗口句柄, 消息ID, wParam, lParam);
    }
    return 0;
}
int 创建窗口( HWND 窗口句柄 , WPARAM wParam , LPARAM lParam )
{
	BOOL	bret ;

	INITCOMMONCONTROLSEX icex ;
	icex.dwSize = sizeof(INITCOMMONCONTROLSEX) ;
	icex.dwICC = ICC_TAB_CLASSES ;
	bret = InitCommonControlsEx( & icex ) ;
	if (bret != TRUE)
	{
		MessageBox(NULL, TEXT("无法注册TabControl控件"), TEXT("错误"), MB_ICONERROR | MB_OK);
		return -1;
	}



	return 0;
}
// “关于”框的消息处理程序。
INT_PTR CALLBACK 关于(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;

    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}
